package main

import (
	"fmt"
)

// 编写一个函数，完成老鼠找路,保证是同一个地图，使用引用
func SetWay(myMap *[8][7]int, i int, j int) bool {
	// 分析出什么情况下，就找到出路
	if myMap[6][5] == 2 {
		return true
	} else {
		// 说明要继续找
		if myMap[i][j] == 0 { // 如果这个点是可以探测的
			// 假设myMap这个点是可以通的,但是需要探测
			myMap[i][j] = 2
			if SetWay(myMap, i + 1, j) {  // 下
				return true
			} else if SetWay(myMap, i, j + 1) { // 右
				return true
			} else if SetWay(myMap, i - 1, j) { // 上
				return true
			} else if SetWay(myMap, i, j - 1) { // 左
				return true
			} else { // 死路
				myMap[i][j] = 3
				return false
			}
		} else {
			return false
		}
	}
}

func main() {

	// 先创建一个二维数组，模拟迷宫
	var myMap [8][7]int

	// 1. 如果元素是1，就是墙
	// 2. 如果元素是0，就是没有走过的点
	// 3. 如果是2，就是通路
	// 4. 如果是3，就是死路

	// 先把地图最上和最下设置为1
	for i := 0; i < 7; i++ {
		myMap[0][i] = 1
		myMap[7][i] = 1
	}

	// 把最左和最右设置为1
	for i := 0; i < 8; i++ {
		myMap[i][0] = 1
		myMap[i][6] = 1
	}

	myMap[3][1] = 1
	myMap[3][2] = 1

	for i := 0; i < 8; i++ {
		for j := 0; j < 7; j++ {
			fmt.Printf("%d\t", myMap[i][j])
		}
		fmt.Println()
	}

	SetWay(&myMap, 1, 1)

	fmt.Println()
	for i := 0; i < 8; i++ {
		for j := 0; j < 7; j++ {
			fmt.Printf("%d\t", myMap[i][j])
		}
		fmt.Println()
	}

}